package com.bdqn;

import com.bdqn.pojo.RoleInfo;
import com.bdqn.pojo.UserInfo;
import com.bdqn.repository.RoleInfoRepository;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

/**
 * JPA基本使用测试类
 *
 * @author LILIBO
 * @since 2022-01-16
 */
@SpringBootTest
public class RoleInfoRepositoryTester {

    @Resource
    private RoleInfoRepository roleInfoRepository;

    /**
     * 测试关联查询（查询角色同时查询用户）
     */
    @Test
    public void testGetRoleUsers() {
        // 测试关联查询（角色与用户：一对多）
        RoleInfo role = roleInfoRepository.findById(1L).get();
        System.out.println("roleName: " + role.getRoleName());
        System.out.println("users.size: " + role.getUsers().size());
    }

    /**
     * 测试级联新增（添加角色同时添加关联的用户）
     */
    @Test
    public void testAddRoleUsers() {
        RoleInfo role = new RoleInfo("测试角色", "演示级联新增角色和用户", 1L);
        UserInfo user1 = new UserInfo("测试用户 1", "123456", role, 1L);
        UserInfo user2 = new UserInfo("测试用户 2", "123456", role, 1L);
        // 将 User 添加到 Role 的 users 集合中，进行级联新增
        role.getUsers().add(user1);
        role.getUsers().add(user2);
        roleInfoRepository.save(role); // 新增角色的同时新增关联的用户
    }

    /**
     * 测试级联删除（删除角色同时删除用户）
     */
    @Test
    public void testDelete() { // 测试级联删除
        // 先使用 getById 方法获取到 Role 的引用，然后调用 delete 方法删除
        RoleInfo roleInfo = roleInfoRepository.getById(21L);
        roleInfoRepository.delete(roleInfo);
    }

}
